use std::{sync::Arc, thread};

/// 基础数据类型，因为都实现了copy，所以都可以再move进线程的情况下，外部一样再，因为是栈拷贝
/// 复杂数据类型都没有实现，所以必须遵守引用规则
/// Arc类型保证了线程内多次引用安全，所有可以允许使用
fn main() {
    let s = "多线程字符串,,验证";
    let ss = s.to_owned();
    let s1 = String::from("oop");
    let a = Arc::new(s1);
    let a1 = a.clone();
    let s1 = thread::spawn(move || {
        println!("hello 多线程,{:?}：这是使用的外部变量",a1);
    });
    s1.join().expect("多线程执行失败");
    println!("这个和线程内使用的一样{:?}", a);
    println!("Hello, world!");
}
